﻿using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Range = OfficeOpenXml.ExcelRange;

namespace 畜牧业审核程序国产.Models.PreReview
{
    internal class Swine : Animal
    {
        public Swine()
        {
            调查户编码所在行 = 3;
            调查户编码所在列 = 1;
            开始行 = 9;
            结束行 = 26;
            填报指标数量 = 18;
            村信息所在行 = 15;
            村信息所在列 = 2;
            时点数结束行 = 14;
            Name = "生猪";
            TableName = "209";
        }
        public bool 判断是否为两头乌猪场(ExcelWorksheet sht, out double 最小出栏头重, out double 最大出栏头重,
            out double 最低单价, out double 最高单价, out double 最高仔猪单价)
        {
            if (sht.Cells[4, 2].Value != null && sht.Cells[4, 2].Value.ToString().Contains("是"))
            {
                最小出栏头重 = 60; 最大出栏头重 = 150; 最低单价 = 15; 最高单价 = 50; 最高仔猪单价 = 100;
                return true;
            }
            else
            {
                最小出栏头重 = 110; 最大出栏头重 = 200; 最低单价 = 10; 最高单价 = 20; 最高仔猪单价 = 40;
                return false;
            }
        }
        //public bool 判断是否为两头乌猪场(List<string> 所有两头乌猪场户编码, string farmingCode, out double 最小出栏头重, out double 最大出栏头重,
        //    out double 最低单价, out double 最高单价, out double 最高仔猪单价)
        //{
        //    if (所有两头乌猪场户编码.Contains(farmingCode))
        //    {
        //        最小出栏头重 = 60; 最大出栏头重 = 150; 最低单价 = 15; 最高单价 = 50; 最高仔猪单价 = 100;
        //        //str_两头乌猪场描述 = "两头乌等特殊品种养殖户";
        //        return true;
        //    }
        //    else
        //    {
        //        最小出栏头重 = 110; 最大出栏头重 = 200; 最低单价 = 10; 最高单价 = 20; 最高仔猪单价 = 40;
        //        //str_两头乌猪场描述 = "非两头乌等特殊品种养殖户";
        //        return false;
        //    }
        //}
        public override void VerificationReview(ExcelWorksheet sht)//核实性审核
        {
            double 最小出栏头重, 最大出栏头重, 最低单价, 最高单价, 最高仔猪单价;
            ////先获取所有两头乌养殖户编码,后续可能不会用到此功能
            //MyDBOperator myDBOperator = MyDBOperator.DBOperatorInstance;

            //List<string> 所有两头乌猪场户编码 = new List<string>();
            bool 是否为两头乌猪场 = 判断是否为两头乌猪场(sht, out 最小出栏头重, out 最大出栏头重, out 最低单价, out 最高单价, out 最高仔猪单价);
            核实性说明标题填写(sht);

            List<string> ListSTR_核实性错误内容 = new List<string>();

            for (int i = 3; i > 0; i--)//从这个季度的最左边的单元格开始
            {
                int 正在审核的列 = this.本季度数据所在列 - i;
                ExcelRange rng月末存栏 = sht.Cells[开始行, 正在审核的列];
                ExcelRange rng月末25公斤以下仔猪存栏 = sht.Cells[开始行 + 1, 正在审核的列]; ;
                ExcelRange rng月末待育肥猪存栏 = sht.Cells[开始行 + 2, 正在审核的列];
                ExcelRange rng月末50公斤以上待育肥猪存栏 = sht.Cells[开始行 + 3, 正在审核的列];
                ExcelRange rng月末种猪存栏 = sht.Cells[开始行 + 4, 正在审核的列];
                ExcelRange rng月末能繁母猪存栏 = sht.Cells[开始行 + 5, 正在审核的列];
                ExcelRange rng当月增加头数 = sht.Cells[开始行 + 6, 正在审核的列];
                ExcelRange rng当月自繁头数 = sht.Cells[开始行 + 7, 正在审核的列];
                ExcelRange rng当月购进头数 = sht.Cells[开始行 + 8, 正在审核的列];
                ExcelRange rng当月减少头数 = sht.Cells[开始行 + 9, 正在审核的列];
                ExcelRange rng当月自宰头数 = sht.Cells[开始行 + 10, 正在审核的列];
                ExcelRange rng当月出售头数 = sht.Cells[开始行 + 11, 正在审核的列];
                ExcelRange rng当月出售肥猪金额 = sht.Cells[开始行 + 12, 正在审核的列];
                ExcelRange rng当月出售肥猪重量 = sht.Cells[开始行 + 13, 正在审核的列];
                ExcelRange rng当月其他原因减少 = sht.Cells[开始行 + 14, 正在审核的列];
                ExcelRange rng当月出售25公斤以下仔猪头数 = sht.Cells[开始行 + 15, 正在审核的列];
                ExcelRange rng当月出售25公斤以下仔猪金额 = sht.Cells[开始行 + 16, 正在审核的列];
                ExcelRange rng当月出售25公斤以下仔猪重量 = sht.Cells[开始行 + 17, 正在审核的列];



                #region  ①①　若出售肥猪头数>0，出售肥猪重量/出售肥猪头数<110和60

                if (Convert.ToDouble( rng当月出售头数.Value) > 0 && (Convert.ToDouble(rng当月出售肥猪重量.Value) / Convert.ToDouble(rng当月出售头数.Value) < 最小出栏头重))
                {
                    string 错误描述 = $"[月度错误]出栏头重偏小,不足{最小出栏头重}公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出栏数为{rng当月出售头数.Value.ToString()}头,重量为{rng当月出售肥猪重量.Value.ToString()}公斤,平均头重为{Convert.ToString(Math.Round(Convert.ToDouble(rng当月出售肥猪重量.Value) / Convert.ToDouble(rng当月出售头数.Value), 2))}公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }

                #endregion
                #region  ②　若出售肥猪头数>0，出售肥猪重量/出售肥猪头数>200和150

                if (Convert.ToDouble(rng当月出售头数.Value) > 0 && Convert.ToDouble(rng当月出售肥猪重量.Value) / Convert.ToDouble(rng当月出售头数.Value) > 最大出栏头重)
                {
                    string 平均头重 = (Convert.ToDouble(rng当月出售肥猪重量.Value) / Convert.ToDouble(rng当月出售头数.Value)).ToString("F2");
                    string 错误描述 = $"[月度错误]出栏头重过高,超过{最大出栏头重}公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出栏数为{rng当月出售头数.Value.ToString()}头,重量为{rng当月出售肥猪重量.Value.ToString()}公斤,平均头重为{平均头重}公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }

                #endregion
                #region  ③　若出售肥猪头数>0，出售肥猪金额/出售肥猪重量<10和15 //不用trycatch

                if (Convert.ToDouble(rng当月出售头数.Value) > 0 && Convert.ToDouble(rng当月出售肥猪金额.Value) / Convert.ToDouble(rng当月出售肥猪重量.Value) < 最低单价)
                {
                    string 平均单价 = (Convert.ToDouble(rng当月出售肥猪金额.Value) / Convert.ToDouble(rng当月出售肥猪重量.Value)).ToString("F2");
                    string 错误描述 = $"[月度错误]平均单价过低,不足{最低单价}元/公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出售金额为{rng当月出售肥猪金额.Value.ToString()}元,重量为{rng当月出售肥猪重量.Value.ToString()}公斤,平均单价为{平均单价}元/公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }

                #endregion
                #region  ④　若出售肥猪头数>0，出售肥猪金额/出售肥猪重量>20

                if (Convert.ToDouble(rng当月出售头数.Value) > 0 && Convert.ToDouble(rng当月出售肥猪金额.Value) / Convert.ToDouble(rng当月出售肥猪重量.Value) > 最高单价)
                {
                    string 平均单价 = (Convert.ToDouble(rng当月出售肥猪金额.Value) / Convert.ToDouble(rng当月出售肥猪重量.Value)).ToString("F2");
                    string 错误描述 = $"[月度错误]平均单价过高,超过{最高单价}元/公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出售金额为{rng当月出售肥猪金额.Value.ToString()}元,重量为{rng当月出售肥猪重量.Value.ToString()}公斤,平均单价为{平均单价}元/公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }

                #endregion
                #region ⑤若出售25公斤以下仔猪头数>0，出售25公斤以下仔猪重量/头数<1。
                if (Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) > 0 && Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) < 1)
                {
                    string 出售仔猪平均头重 = (Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value)).ToString("F2");
                    string 错误描述 = $"[月度错误]猪仔重量应大于1公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出售25公斤以下仔猪头数为{rng当月出售25公斤以下仔猪头数.Value.ToString()}头,重量为{rng当月出售25公斤以下仔猪重量.Value.ToString()}公斤,平均头重为{出售仔猪平均头重}公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }
                #endregion
                #region ⑥若出售25公斤以下仔猪头数>0，出售25公斤以下仔猪金额/重量<6
                if (Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) > 0 && Convert.ToDouble(rng当月出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) < 6)
                {
                    string 出售仔猪平均价格 = (Convert.ToDouble(rng当月出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value)).ToString("F2");
                    string 错误描述 = $"[月度错误]仔猪平均单价应大于等于6元/公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出售25公斤以下仔猪金额为{rng当月出售25公斤以下仔猪金额.Value.ToString()}元,重量为{rng当月出售25公斤以下仔猪重量.Value.ToString()}公斤,平均单价为{出售仔猪平均价格}元/公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }
                #endregion
                #region ⑦若出售25公斤以下仔猪头数>0，出售25公斤以下仔猪金额/重量>40。

                if (Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) > 0 && Convert.ToDouble(rng当月出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) > 最高仔猪单价)
                {
                    string 出售仔猪平均价格 = (Convert.ToDouble(rng当月出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value)).ToString("F2");

                    string 错误描述 = $"[月度错误]仔猪平均单价应小于等于{最高仔猪单价}元/公斤:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}出售25公斤以下仔猪金额为{rng当月出售25公斤以下仔猪金额.Value.ToString()}元,重量为{rng当月出售25公斤以下仔猪重量.Value.ToString()}公斤,平均单价为{出售仔猪平均价格}元/公斤";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }
                #endregion
                #region ⑧其他原因减少/（期末存栏+出售肥猪头数）<1.5%
                double 其他原因减少占月养殖量比重 = Convert.ToDouble(rng当月其他原因减少.Value) / (Convert.ToDouble(rng月末存栏.Value) + Convert.ToDouble(rng当月出售头数.Value));
                if (Convert.ToDouble(rng当月其他原因减少.Value) > 0 && 其他原因减少占月养殖量比重 < 0.015)
                {


                    string 错误描述 = $"[月度错误]其他原因减少包括死亡和售卖中猪,其它原因减少占当月养殖量的比重偏低,小于1.5%:";
                    string 具体错误 = $"{sht.Cells[开始行 - 2, 正在审核的列].Value.ToString()}其他原因减少为{rng当月其他原因减少.Value}头,占本月养殖量比重为{(100 * 其他原因减少占月养殖量比重).ToString("F2")}%";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }
                #endregion


            }
            //季度核实性审核
            ExcelRange rng季度末存栏 = sht.Cells[开始行, 本季度数据所在列];
            ExcelRange rng季度末25公斤以下仔猪存栏 = sht.Cells[开始行 + 1, 本季度数据所在列]; ;
            ExcelRange rng季度末待育肥猪存栏 = sht.Cells[开始行 + 2, 本季度数据所在列];
            ExcelRange rng季度末50公斤以上待育肥猪存栏 = sht.Cells[开始行 + 3, 本季度数据所在列];
            ExcelRange rng季度末种猪存栏 = sht.Cells[开始行 + 4, 本季度数据所在列];
            ExcelRange rng季度末能繁母猪存栏 = sht.Cells[开始行 + 5, 本季度数据所在列];
            ExcelRange rng当季增加头数 = sht.Cells[开始行 + 6, 本季度数据所在列];
            ExcelRange rng当季自繁头数 = sht.Cells[开始行 + 7, 本季度数据所在列];
            ExcelRange rng当季购进头数 = sht.Cells[开始行 + 8, 本季度数据所在列];
            ExcelRange rng当季减少头数 = sht.Cells[开始行 + 9, 本季度数据所在列];
            ExcelRange rng当季自宰头数 = sht.Cells[开始行 + 10, 本季度数据所在列];
            ExcelRange rng当季出售头数 = sht.Cells[开始行 + 11, 本季度数据所在列];
            ExcelRange rng当季出售肥猪金额 = sht.Cells[开始行 + 12, 本季度数据所在列];
            ExcelRange rng当季出售肥猪重量 = sht.Cells[开始行 + 13, 本季度数据所在列];
            ExcelRange rng当季其他原因减少 = sht.Cells[开始行 + 14, 本季度数据所在列];
            ExcelRange rng当季出售25公斤以下仔猪头数 = sht.Cells[开始行 + 15, 本季度数据所在列];
            ExcelRange rng当季出售25公斤以下仔猪金额 = sht.Cells[开始行 + 16, 本季度数据所在列];
            ExcelRange rng当季出售25公斤以下仔猪重量 = sht.Cells[开始行 + 17, 本季度数据所在列];


            //接下去先审核,并把错误写到一个集合中或字典中
            #region  ①①　若出售肥猪头数>0，出售肥猪重量/出售肥猪头数<110和60

            if (Convert.ToDouble( rng当季出售头数.Value) > 0 && Convert.ToDouble(rng当季出售肥猪重量.Value) / Convert.ToDouble(rng当季出售头数.Value) < 最小出栏头重)
            {
                string 错误描述 = $"[季度错误]出栏头重偏小,不足{最小出栏头重}公斤:";
                string 具体错误 = $"出栏数为{rng当季出售头数.Value.ToString()}头,重量为{rng当季出售肥猪重量.Value.ToString()}公斤,头重为{Convert.ToString(Math.Round(Convert.ToDouble(rng当季出售肥猪重量.Value) / Convert.ToDouble(rng当季出售头数.Value), 2))}公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }

            #endregion
            #region  ②②　若出售肥猪头数>0，出售肥猪重量/出售肥猪头数>200和150

            if (Convert.ToDouble(rng当季出售头数.Value) > 0 && Convert.ToDouble(rng当季出售肥猪重量.Value) / Convert.ToDouble(rng当季出售头数.Value) > 最大出栏头重)
            {
                string 平均头重 = (Convert.ToDouble(rng当季出售肥猪重量.Value) / Convert.ToDouble(rng当季出售头数.Value)).ToString("F2");
                string 错误描述 = $"[季度错误]出栏头重过高,超过{最大出栏头重}公斤:";
                string 具体错误 = $"出栏数为 {rng当季出售头数.Value.ToString()}头,重量为{rng当季出售肥猪重量.Value.ToString()}公斤,头重为{平均头重}公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }

            #endregion
            #region  ③平均单价过低 若出售肥猪头数>0，出售肥猪金额/出售肥猪重量<10和15

            if (Convert.ToDouble(rng当季出售头数.Value) > 0 && Convert.ToDouble(rng当季出售肥猪金额.Value) / Convert.ToDouble(rng当季出售肥猪重量.Value) < 最低单价)
            {
                string 平均单价 = (Convert.ToDouble(rng当季出售肥猪金额.Value) / Convert.ToDouble(rng当季出售肥猪重量.Value)).ToString("F2");
                string 错误描述 = $"[季度错误]平均单价过低,不足{最低单价}元/公斤:";
                string 具体错误 = $"出售金额为{rng当季出售肥猪金额.Value.ToString()}元,重量为{rng当季出售肥猪重量.Value.ToString()}公斤,平均单价为{平均单价}元/公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }

            #endregion
            #region  ④平均单价过高 　若出售肥猪头数>0，出售肥猪金额/出售肥猪重量>20和50

            if (Convert.ToDouble(rng当季出售头数.Value) > 0 && Convert.ToDouble(rng当季出售肥猪金额.Value) / Convert.ToDouble(rng当季出售肥猪重量.Value) > 最高单价)
            {
                string 平均单价 = (Convert.ToDouble(rng当季出售肥猪金额.Value) / Convert.ToDouble(rng当季出售肥猪重量.Value)).ToString("F2");
                string 错误描述 = $"[季度错误]平均单价过高,超过{最高单价}元/公斤:";
                string 具体错误 = $"出售金额为{rng当季出售肥猪金额.Value.ToString()}元,重量为{rng当季出售肥猪重量.Value.ToString()},平均单价为{平均单价}元/公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }

            #endregion
            #region ⑤若出售25公斤以下仔猪头数>0，出售25公斤以下仔猪重量/头数<1。
            if (Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) > 0 && Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) < 1)
            {
                string 出售仔猪平均头重 = (Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value)).ToString("F2");
                string 错误描述 = $"[季度错误]猪仔重量应大于1公斤:";
                string 具体错误 = $"出售25公斤以下仔猪头数为{rng当季出售25公斤以下仔猪头数.Value.ToString()}头,重量为{rng当季出售25公斤以下仔猪重量.Value.ToString()}公斤,平均头重为{出售仔猪平均头重}公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion
            #region ⑥若出售25公斤以下仔猪头数>0，出售25公斤以下仔猪金额/重量<6
            if (Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) > 0 && Convert.ToDouble(rng当季出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) < 6)
            {
                string 出售仔猪平均价格 = (Convert.ToDouble(rng当季出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value)).ToString("F2");
                string 错误描述 = $"[季度错误]仔猪平均单价小于6元/公斤:";
                string 具体错误 = $"出售25公斤以下仔猪金额为{rng当季出售25公斤以下仔猪金额.Value.ToString()}元,重量为{rng当季出售25公斤以下仔猪重量.Value.ToString()}公斤,平均单价为{出售仔猪平均价格}元/公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion
            #region ⑦若出售25公斤以下仔猪头数>0，出售25公斤以下仔猪金额/重量>40。

            if (Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) > 0 && Convert.ToDouble(rng当季出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) > 最高仔猪单价)
            {
                string 出售仔猪平均价格 = (Convert.ToDouble(rng当季出售25公斤以下仔猪金额.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value)).ToString("F2");

                string 错误描述 = $"[季度错误]出售仔猪平均单价大于{最高仔猪单价}元/公斤:";
                string 具体错误 = $"出售25公斤以下仔猪金额为{rng当季出售25公斤以下仔猪金额.Value.ToString()}元,重量为{rng当季出售25公斤以下仔猪重量.Value.ToString()}头,平均单价为{出售仔猪平均价格}元/公斤";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion
            #region ⑧其他原因减少/（期末存栏+出售肥猪头数）<1.5%
            double 其他原因减少占季度养殖量比重 = Convert.ToDouble(rng当季其他原因减少.Value) / (Convert.ToDouble(rng季度末存栏.Value) + Convert.ToDouble(rng当季出售头数.Value));
            if (Convert.ToDouble(rng当季其他原因减少.Value) > 0 && 其他原因减少占季度养殖量比重 < 0.015)
            {


                string 错误描述 = $"[季度错误]其他原因减少包括死亡和售卖中猪,其它原因减少占当季养殖量的比重偏低,小于1.5%:";
                string 具体错误 = $"其他原因减少头数为{rng当季其他原因减少.Value}头,占本季度养殖量比重为{(100 * 其他原因减少占季度养殖量比重).ToString("F2")}%";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion
            #region ⑨如果本季自繁>0，上季能繁母猪存栏=0 
            Range rng上季末能繁母猪存栏 = sht.Cells[开始行 + 5, 上季度数据所在列];

            if (Convert.ToDouble(rng当季自繁头数.Value) > 0 && Convert.ToDouble(rng上季末能繁母猪存栏.Value) == 0)
            {
                string 错误描述 = $"[季度错误]有自繁，上季度末却没有母猪:";
                string 具体错误 = $"本季度自繁{rng当季自繁头数.Value}头,而上季度能繁母猪存栏为0";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion
            #region ⑩如果本季自繁>0，本季能繁母猪存栏=0
            if (Convert.ToDouble(rng当季自繁头数.Value) > 0 && Convert.ToDouble(rng季度末能繁母猪存栏.Value) == 0)
            {
                string 错误描述 = $"[季度错误]有自繁，本季度末却没有母猪:";
                string 具体错误 = $"本季度自繁{rng当季自繁头数.Value}头,而本季度能繁母猪存栏为0";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion
            #region 十一 自宰头数+出售头数>上季待育肥猪存栏+本季购进
            Range rng上季度末待育肥猪存栏 = sht.Cells[开始行 + 2, 上季度数据所在列];

            if (Convert.ToDouble(rng当季自宰头数.Value) + Convert.ToDouble(rng当季出售头数.Value) > Convert.ToDouble(rng当季购进头数.Value) + Convert.ToDouble(rng上季度末待育肥猪存栏.Value))
            {

                string 错误描述 = $"[季度错误]本季出栏（自宰头数+出售头数）应小于等于上季待育肥猪存栏、本季度购进之和，超出请核实说明：";
                string 具体错误 = $"本季度的出栏数为{Convert.ToDouble(rng当季自宰头数.Value) + Convert.ToDouble(rng当季出售头数.Value)}头,本季购进为{rng当季购进头数.Value}头,上季末待育肥猪存栏为{rng上季度末待育肥猪存栏.Value}头";
                ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
            }

            #endregion
            #region 十二\上季度自繁数量+本季自繁数量/本季母猪存栏>20

            Range rng上季度自繁头数 = sht.Cells[开始行 + 7, 上季度数据所在列];
            if (_seasonNow != 1)
            {


                if ((Convert.ToDouble(rng上季度自繁头数.Value) + Convert.ToDouble(rng当季自繁头数.Value)) / Convert.ToDouble(rng季度末能繁母猪存栏.Value) > 20)
                {
                    string 错误描述 = $"[季度错误]上季度自繁、本季度自繁数量之和除以母猪存栏应小于等于20，现自繁数量较多，请核实说明：";
                    string 具体错误 = $"本季度的的自繁数为{rng当季自繁头数.Value}头,上季度自繁为{rng上季度自繁头数.Value}头,本季度能繁母猪存栏为{rng季度末能繁母猪存栏.Value}头";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }
            }
            else
            {
                
            }
            #endregion//二季度开始审
            #region 十三 出售肥猪头重环比变动幅度不在-30%到30%之间

            Range rng上季出售头数;
            Range rng上季出售肥猪重量;


            rng上季出售头数 = sht.Cells[开始行 + 11, 上季度数据所在列];
            rng上季出售肥猪重量 = sht.Cells[开始行 + 13, 上季度数据所在列];

           
            try
            {
                double dbl_当季出栏头重 = Convert.ToDouble(rng当季出售肥猪重量.Value) / Convert.ToDouble(rng当季出售头数.Value);
                double dbl_上季出栏头重 = Convert.ToDouble(rng上季出售肥猪重量.Value) / Convert.ToDouble(rng上季出售头数.Value);
                
                if (dbl_当季出栏头重 / dbl_上季出栏头重 > 1.3 || dbl_当季出栏头重 / dbl_上季出栏头重 < 0.7)
                {
                    string 错误描述 = $"[季度错误]出栏头重变动幅太大,本季度出栏头重相比上季度出栏头重增减幅度超过30%：";

                    string 具体错误 = $"本季度平均出栏头重为{dbl_当季出栏头重.ToString("F2")}公斤,上季度平均出栏头重为{dbl_上季出栏头重.ToString("F2")}头,增减幅度为{Math.Round(dbl_当季出栏头重 / dbl_上季出栏头重 - 1, 2) * 100}%";
                    ListSTR_核实性错误内容.Add(错误描述 + 具体错误);
                }
            }
            catch (Exception)
            {
                // ListSTR_季度核实性错误内容.Add(错误描述 + 具体错误);
            }
            #endregion



            //单独做成一个方法
            base.核实数据输出至台账( ListSTR_核实性错误内容, sht);

        }
       
        public override string  MandatoryReview(ExcelWorksheet sht)
        {
            base.本月及上季末月指标空值转成0并所有单元格全部居中(sht);
            base.本季度及上季度指标空值转成0(sht);
            base.恢复单元格颜色并删除注释(sht);
            var 户编码 = GetFarmCode(sht, 2, 1); 
            for (int i = 3; i > 0; i--)
            {


                int 正在审核的列 = 本季度数据所在列 - i;

                ExcelRange rng月末存栏 = sht.Cells[开始行, 正在审核的列];
                ExcelRange rng月末25公斤以下仔猪存栏 = sht.Cells[开始行 + 1, 正在审核的列]; ;
                ExcelRange rng月末待育肥猪存栏 = sht.Cells[开始行 + 2, 正在审核的列];
                ExcelRange rng月末50公斤以上待育肥猪存栏 = sht.Cells[开始行 + 3, 正在审核的列];
                ExcelRange rng月末种猪存栏 = sht.Cells[开始行 + 4, 正在审核的列];
                ExcelRange rng月末能繁母猪存栏 = sht.Cells[开始行 + 5, 正在审核的列];
                ExcelRange rng当月增加头数 = sht.Cells[开始行 + 6, 正在审核的列];
                ExcelRange rng当月自繁头数 = sht.Cells[开始行 + 7, 正在审核的列];
                ExcelRange rng当月购进头数 = sht.Cells[开始行 + 8, 正在审核的列];
                ExcelRange rng当月减少头数 = sht.Cells[开始行 + 9, 正在审核的列];
                ExcelRange rng当月自宰头数 = sht.Cells[开始行 + 10, 正在审核的列];
                ExcelRange rng当月出售头数 = sht.Cells[开始行 + 11, 正在审核的列];
                ExcelRange rng当月出售肥猪金额 = sht.Cells[开始行 + 12, 正在审核的列];
                ExcelRange rng当月出售肥猪重量 = sht.Cells[开始行 + 13, 正在审核的列];
                ExcelRange rng当月其他原因减少 = sht.Cells[开始行 + 14, 正在审核的列];
                ExcelRange rng当月出售25公斤以下仔猪头数 = sht.Cells[开始行 + 15, 正在审核的列];
                ExcelRange rng当月出售25公斤以下仔猪金额 = sht.Cells[开始行 + 16, 正在审核的列];
                ExcelRange rng当月出售25公斤以下仔猪重量 = sht.Cells[开始行 + 17, 正在审核的列];

                #region 2.表内指标 ①　期末存栏≠25公斤以下仔猪+待育肥猪+种猪


                if (Convert.ToDouble(rng月末存栏.Value) != Convert.ToDouble(rng月末25公斤以下仔猪存栏.Value) + Convert.ToDouble(rng月末种猪存栏.Value) + Convert.ToDouble(rng月末待育肥猪存栏.Value))
                {
                    string 提示信息 = "期末存栏应该等于25公斤以下仔猪、待遇肥猪、种猪之和!";
                    //List<Range> rngs = new List<Range>() { rng本月期末存栏, rng25公斤以下仔猪存栏, rng种猪存栏, rng待育肥猪存栏 };
                    //foreach (var rng in rngs)
                    //{
                    //    rng.Interior.ColorIndex = 3;
                    //    rng.AddComment(提示信息);
                    //}
                    Range[] ranges = new Range[] { rng月末存栏, rng月末25公斤以下仔猪存栏, rng月末种猪存栏, rng月末待育肥猪存栏 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }
                #endregion
                #region ② 待育肥猪存栏<50公斤以上存栏

                if (Convert.ToDouble(rng月末待育肥猪存栏.Value) < Convert.ToDouble(rng月末50公斤以上待育肥猪存栏.Value))
                {
                    string 提示信息 = "待育肥猪应大于等于50公斤以上肥猪";
                    //List<Range> ranges = new List<Range> { rng月末待育肥猪存栏, rng月末50公斤以上待育肥猪存栏 };
                    //foreach (Range rng in ranges)
                    //{
                    //    rng.Interior.ColorIndex = 3;
                    //    rng.AddComment(提示信息);
                    //}
                    // MessageBox.Show(提示信息, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Range[] rngs = new Range[] { rng月末待育肥猪存栏, rng月末50公斤以上待育肥猪存栏 };
                    错误单元格标注成红色并加注释(提示信息, sht, rngs);

                }
                #endregion
                #region ③种猪<其中：能繁殖母猪

                if (Convert.ToDouble(rng月末种猪存栏.Value) < Convert.ToDouble(rng月末能繁母猪存栏.Value))
                {
                    string 提示信息 = "种猪存栏数应大于等于能繁殖母猪存栏数";
                    Range[] rngs = new Range[] { rng月末种猪存栏, rng月末能繁母猪存栏 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, rngs);

                }


                #endregion
                #region ④期内增加!=自繁+购进

                if (Convert.ToDouble(rng当月增加头数.Value) != Convert.ToDouble(rng当月自繁头数.Value) + Convert.ToDouble(rng当月购进头数.Value))
                {
                    string 提示信息 = "期内增加数量应等于自繁、购进之和";
                    Range[] ranges = new Range[] { rng当月增加头数, rng当月自繁头数, rng当月购进头数 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }
                #endregion
                #region ⑤　期内减少头数≠自宰肥猪头数+出售肥猪头数+其它原因减少

                if (Convert.ToDouble(rng当月减少头数.Value) != Convert.ToDouble(rng当月自宰头数.Value) + Convert.ToDouble(rng当月出售头数.Value) + Convert.ToDouble(rng当月其他原因减少.Value))
                {
                    string 提示信息 = "期内减少数量应等于自宰肥猪数量、出售肥猪数量、其他原因减少数量之和";
                    Range[] ranges = new Range[] { rng当月减少头数, rng当月自宰头数, rng当月出售头数, rng当月其他原因减少 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }

                #endregion
                #region ⑥　其它原因减少<出售25公斤以下仔猪头数

                if (Convert.ToDouble(rng当月其他原因减少.Value) < Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value))
                {
                    string 提示信息 = "其他原因减少头数应大于等于出售25公斤以下仔猪头数";
                    Range[] ranges = new Range[] { rng当月其他原因减少, rng当月出售25公斤以下仔猪头数 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }
                #endregion
                #region ⑦　若有肥猪出栏,则出售头数、金额、重量至少有一个未填

                //if (Convert.ToDoublerng当月出售头数.Value == 0 && (Convert.ToDoublerng当月出售肥猪金额.Value != 0 || Convert.ToDoublerng当月出售肥猪重量.Value != 0))
                if (Convert.ToDouble(rng当月出售头数.Value) + Convert.ToDouble(rng当月出售肥猪重量.Value) + Convert.ToDouble(rng当月出售肥猪金额.Value) > 0 &&
                    Convert.ToDouble(rng当月出售头数.Value) * Convert.ToDouble(rng当月出售肥猪重量.Value) * Convert.ToDouble(rng当月出售肥猪金额.Value) == 0)
                {
                    //string 提示信息 = "若出售肥猪头数为0，那么出售肥猪金额、重量均应为0";
                    string 提示信息 = "若有肥猪出栏,则出售头数、金额、重量至少有一个未填";
                    Range[] ranges = new Range[] { rng当月出售头数, rng当月出售肥猪金额, rng当月出售肥猪重量 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }
                #endregion
                #region ⑧　若有出售25公斤以下仔猪,则出售仔猪头数、金额、重量至少有一个未填

                if (Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) + Convert.ToDouble(rng当月出售25公斤以下仔猪金额.Value) + Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) > 0 &&
                    Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) * Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) * Convert.ToDouble(rng当月出售25公斤以下仔猪金额.Value) == 0)
                {
                    string 提示信息 = "若有出售25公斤以下仔猪,则出售仔猪头数、金额、重量至少有一个未填";
                    Range[] ranges = new Range[] { rng当月出售25公斤以下仔猪头数, rng当月出售25公斤以下仔猪重量, rng当月出售25公斤以下仔猪金额 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }
                #endregion
                #region ⑨　若出售25公斤以下仔猪头数，出售25公斤以下仔猪重量/头数>25//这里不用trycatch了,因为⑧已经排除了出售25公斤为0的情况

                if (Convert.ToDouble(rng当月出售25公斤以下仔猪重量.Value) / Convert.ToDouble(rng当月出售25公斤以下仔猪头数.Value) > 25)
                {
                    string 提示信息 = "出售的25公斤以下猪仔头重应小于等于25公斤";
                    Range[] ranges = new Range[] { rng当月出售25公斤以下仔猪重量, rng当月出售25公斤以下仔猪头数 };
                    base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

                }
                #endregion
                //#region 出售肥猪金额或出售肥猪重量不为0,但出售肥猪数量为0

                #region 1.月度间平衡 本月存栏 !=上月末存栏+本月期内增加-本月期内减少

                if (i!=3)
                {
                    Range rng上月末存栏 =  sht.Cells[开始行, 本季度数据所在列 - (i + 1)]; 
                    if (Convert.ToDouble(rng月末存栏.Value) != Convert.ToDouble(rng上月末存栏.Value) +
                        Convert.ToDouble(rng当月增加头数.Value) - Convert.ToDouble(rng当月减少头数.Value))
                    {
                        string 提示信息 = "本月存栏应等于上月末存栏+本月期内增加-本月期内减少";
                        Range[] ranges = new Range[] { rng上月末存栏, rng月末存栏, rng当月增加头数, rng当月减少头数 };
                        base.错误单元格标注成红色并加注释(提示信息, sht, ranges);
                    }
                }
                else if (_seasonNow!=1)
                {
                    Range rng上月末存栏  = sht.Cells[开始行, 本季度数据所在列 - (i + 2)]; //上个季度的月末数据要往前再退一列
                    if (Convert.ToDouble(rng月末存栏.Value) != Convert.ToDouble(rng上月末存栏.Value) +
                        Convert.ToDouble(rng当月增加头数.Value) - Convert.ToDouble(rng当月减少头数.Value))
                    {
                        string 提示信息 = "本月存栏应等于上月末存栏+本月期内增加-本月期内减少";
                        Range[] ranges = new Range[] { rng上月末存栏, rng月末存栏, rng当月增加头数, rng当月减少头数 };
                        base.错误单元格标注成红色并加注释(提示信息, sht, ranges);
                    }
                }
                else//一季度的上月情况
                {
                    try
                    {
                        MyDBOperator dBOperator = MyDBOperator.DBOperatorInstance;
                        string sqlToGet上月末存栏数据 = $"select 期末存栏合计01  from 统计云{_yearNow.ToString()}年第四季度A209 where 户编码 = '{户编码}'";

                        double 上月末存栏数据 = Convert.ToDouble(dBOperator.GetDataTable(sqlToGet上月末存栏数据).Rows[0][0]);
                        if (Convert.ToDouble(rng月末存栏.Value) != 上月末存栏数据+ 
                            Convert.ToDouble(rng当月增加头数.Value) - Convert.ToDouble(rng当月减少头数.Value))
                        {
                            string 提示信息 = $"本月存栏应等于上月末存栏+本月期内增加-本月期内减少,去年年末数据为{上月末存栏数据.ToString()}";
                            Range[] ranges = new Range[] {  rng月末存栏, rng当月增加头数, rng当月减少头数 };
                            base.错误单元格标注成红色并加注释(提示信息, sht, ranges);
                        }
                    }
                    catch (Exception ex)
                    {
                        //MyMessagebox.Show(ex.Message)
                        //throw;
                        return "本地数据未导入上一年第四季度数据";
                    }
                }



                #endregion
            }
            //季度强制性审核
            ExcelRange rng季度末存栏 = sht.Cells[开始行, 本季度数据所在列];
            ExcelRange rng季度末25公斤以下仔猪存栏 = sht.Cells[开始行 + 1, 本季度数据所在列]; ;
            ExcelRange rng季度末待育肥猪存栏 = sht.Cells[开始行 + 2, 本季度数据所在列];
            ExcelRange rng季度末50公斤以上待育肥猪存栏 = sht.Cells[开始行 + 3, 本季度数据所在列];
            ExcelRange rng季度末种猪存栏 = sht.Cells[开始行 + 4, 本季度数据所在列];
            ExcelRange rng季度末能繁母猪存栏 = sht.Cells[开始行 + 5, 本季度数据所在列];
            ExcelRange rng当季增加头数 = sht.Cells[开始行 + 6, 本季度数据所在列];
            ExcelRange rng当季自繁头数 = sht.Cells[开始行 + 7, 本季度数据所在列];
            ExcelRange rng当季购进头数 = sht.Cells[开始行 + 8, 本季度数据所在列];
            ExcelRange rng当季减少头数 = sht.Cells[开始行 + 9, 本季度数据所在列];
            ExcelRange rng当季自宰头数 = sht.Cells[开始行 + 10, 本季度数据所在列];
            ExcelRange rng当季出售头数 = sht.Cells[开始行 + 11, 本季度数据所在列];
            ExcelRange rng当季出售肥猪金额 = sht.Cells[开始行 + 12, 本季度数据所在列];
            ExcelRange rng当季出售肥猪重量 = sht.Cells[开始行 + 13, 本季度数据所在列];
            ExcelRange rng当季其他原因减少 = sht.Cells[开始行 + 14, 本季度数据所在列];
            ExcelRange rng当季出售25公斤以下仔猪头数 = sht.Cells[开始行 + 15, 本季度数据所在列];
            ExcelRange rng当季出售25公斤以下仔猪金额 = sht.Cells[开始行 + 16, 本季度数据所在列];
            ExcelRange rng当季出售25公斤以下仔猪重量 = sht.Cells[开始行 + 17, 本季度数据所在列];
            //时点数
            for (int i = 开始行; i <= 时点数结束行; i++)
            {
                sht.Cells[i, 本季度数据所在列].Value = Convert.ToDouble(sht.Cells[i, 本季度数据所在列 - 1].Text);
            }
            //合计数
            for (int i = 时点数结束行 + 1; i < 结束行; i++)
            {
                sht.Cells[i, 本季度数据所在列].Value = Convert.ToDouble(sht.Cells[i, 本季度数据所在列 - 1].Text) +
                    Convert.ToDouble(sht.Cells[i, 本季度数据所在列 - 2].Text) +
                    Convert.ToDouble(sht.Cells[i, 本季度数据所在列 - 3].Text);
            }

            #region 2.表内指标 ①　期末存栏≠25公斤以下仔猪 + 待育肥猪 + 种猪
            if (Convert.ToDouble(rng季度末存栏.Value) != Convert.ToDouble(rng季度末25公斤以下仔猪存栏.Value) + Convert.ToDouble(rng季度末种猪存栏.Value) + Convert.ToDouble(rng季度末待育肥猪存栏.Value))
            {
                string 提示信息 = "季度末存栏数不等于仔猪、待育肥猪、种猪之和，请核实!";
                //List<Range> rngs = new List<Range>() { rng本月期末存栏, rng25公斤以下仔猪存栏, rng种猪存栏, rng待育肥猪存栏 };
                //foreach (var rng in rngs)
                //{
                //    rng.Interior.ColorIndex = 3;
                //    rng.AddComment(提示信息);
                //}
                Range[] ranges = new Range[] { rng季度末存栏, rng季度末25公斤以下仔猪存栏, rng季度末种猪存栏, rng季度末待育肥猪存栏 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);


            }
            #endregion
            #region ②待育肥猪存栏<50公斤以上存栏
            if (Convert.ToDouble(rng季度末待育肥猪存栏.Value) < Convert.ToDouble(rng季度末50公斤以上待育肥猪存栏.Value))
            {
                string 提示信息 = "待育肥猪应大于等于50公斤以上肥猪";
                Range[] ranges = new Range[] { rng季度末待育肥猪存栏, rng季度末50公斤以上待育肥猪存栏 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion
            #region ③种猪<能繁殖母猪
            if (Convert.ToDouble(rng季度末种猪存栏.Value) < Convert.ToDouble(rng季度末能繁母猪存栏.Value))
            {
                string 提示信息 = "种猪数应大于等于能繁殖母猪数";
                Range[] ranges = new Range[] { rng季度末种猪存栏, rng季度末能繁母猪存栏 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion
            #region ④期内增加头数≠自繁+购进
            if (Convert.ToDouble(rng当季增加头数.Value) != Convert.ToDouble(rng当季自繁头数.Value) + Convert.ToDouble(rng当季购进头数.Value))
            {
                string 提示信息 = "期内增加数量应等于自繁、购进之和";
                Range[] ranges = new Range[] { rng当季增加头数, rng当季自繁头数, rng当季购进头数 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion

            #region ⑤　期内减少头数≠自宰肥猪头数+出售肥猪头数+其它原因减少

            if (Convert.ToDouble(rng当季减少头数.Value) != Convert.ToDouble(rng当季自宰头数.Value) + Convert.ToDouble(rng当季出售头数.Value) + Convert.ToDouble(rng当季其他原因减少.Value))
            {
                string 提示信息 = "期内减少数量应等于自宰肥猪数量、出售肥猪数量、其他原因减少数量之和";
                Range[] ranges = new Range[] { rng当季减少头数, rng当季自宰头数, rng当季出售头数, rng当季其他原因减少 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }

            #endregion
            #region ⑥　其它原因减少<出售25公斤以下仔猪头数

            if (Convert.ToDouble(rng当季其他原因减少.Value) < Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value))
            {
                string 提示信息 = "其他原因减少头数应大于等于出售25公斤以下仔猪头数";
                Range[] ranges = new Range[] { rng当季其他原因减少, rng当季出售25公斤以下仔猪头数 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion
            #region ⑦　若有出栏数,则出售肥猪头数、出售肥猪金额、出售肥猪重量中至少有一个未填

            if (Convert.ToDouble(rng当季出售头数.Value) + Convert.ToDouble(rng当季出售肥猪重量.Value) + Convert.ToDouble(rng当季出售肥猪金额.Value) > 0 &&
                Convert.ToDouble(rng当季出售头数.Value) * Convert.ToDouble(rng当季出售肥猪重量.Value) * Convert.ToDouble(rng当季出售肥猪金额.Value) == 0)
            {
                string 提示信息 = "若有出栏数,则出售肥猪头数、出售肥猪金额、出售肥猪重量中至少有一个未填";
                Range[] ranges = new Range[] { rng当季出售头数, rng当季出售肥猪金额, rng当季出售肥猪重量 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion
            #region ⑧　若有出售25公斤以下仔猪,则出售25公斤以下仔猪头数、金额、重量至少有一个未填

            if (Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) + Convert.ToDouble(rng当季出售25公斤以下仔猪金额.Value.ToString()) + Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) > 0 &&
                Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) * Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) * Convert.ToDouble(rng当季出售25公斤以下仔猪金额.Value) == 0)
            {
                string 提示信息 = "若有出售25公斤以下仔猪,则出售25公斤以下仔猪头数、金额、重量至少有一个未填";
                Range[] ranges = new Range[] { rng当季出售25公斤以下仔猪头数, rng当季出售25公斤以下仔猪重量, rng当季出售25公斤以下仔猪金额 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion
            #region ⑨　若出售25公斤以下仔猪头数，出售25公斤以下仔猪重量/头数>25

            if (Convert.ToDouble(rng当季出售25公斤以下仔猪重量.Value) / Convert.ToDouble(rng当季出售25公斤以下仔猪头数.Value) > 25)
            {
                string 提示信息 = "出售的25公斤以下猪仔头重应小于等于25公斤";
                Range[] ranges = new Range[] { rng当季出售25公斤以下仔猪重量, rng当季出售25公斤以下仔猪头数 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }
            #endregion
            //#region 出售肥猪金额或出售肥猪重量不为0,但出售肥猪数量为0
            //if (((double)rng当月出售肥猪重量.Value != 0 || (double)rng当月出售肥猪金额.Value != 0) && (double)rng当月出售头数.Value == 0)
            //{
            //    string 提示信息 = "出售肥猪金额或出售肥猪重量不为0,但出售肥猪数量为0";
            //    Range[] ranges = new Range[] { rng当月出售肥猪重量, rng当月出售肥猪金额, rng当月出售头数 };
            //    base.错误单元格标注成红色并加注释(提示信息, ranges);
            //    return false;
            //}
            //#endregion

            #region 1.季度间平衡 本季存栏 !=上季末存栏+本季期内增加-本季期内减少



            Range rng上季末存栏 = sht.Cells[开始行, 上季度数据所在列];


            if (Convert.ToDouble(rng季度末存栏.Value) != Convert.ToDouble(rng上季末存栏.Value) + Convert.ToDouble(rng当季增加头数.Value) - Convert.ToDouble(rng当季减少头数.Value))
            {
                string 提示信息 = "本季度存栏应等于上季度末存栏+本季度期内增加-本季度期内减少";

                //他妈的怎么还跟单元格的添加批注的顺序有关,同一行相连的单元格,先添加后面的单元格批注,再添加前面的单元格批注就会出现添加不了的情况
                Range[] ranges = new Range[] { rng上季末存栏, rng季度末存栏, rng当季增加头数, rng当季减少头数 };
                base.错误单元格标注成红色并加注释(提示信息, sht, ranges);

            }

            #endregion

            return "强制性审核完成";

        }



    }
}
